Fix failure of calling authenticated APIs when multiple AsgardeoProvider instances are used#334
Conversation
09e5dd9 to
db06041
Compare
…agnization support
db06041 to
2af8495
Compare
DonOmalVindula
left a comment
There was a problem hiding this comment.
Reviewed the changes. Left some comments. Please address them before merging.
|
Issue: This file still has module-level request: AsgardeoSPAClient.getInstance().httpRequest.bind(AsgardeoSPAClient.getInstance()),
requestAll: AsgardeoSPAClient.getInstance().httpRequestAll.bind(AsgardeoSPAClient.getInstance()),This is the same pattern you fixed in all the const createHttp = (instanceId: number = 0) => {
const client = AsgardeoSPAClient.getInstance(instanceId);
return {
request: client.httpRequest.bind(client),
requestAll: client.httpRequestAll.bind(client),
};
};
export default createHttp;Or alternatively, if this is only used internally, pass the |
| } | ||
|
|
||
| if (instanceID) { | ||
| if (instanceID !== undefined) { |
There was a problem hiding this comment.
Good catch fixing instanceID !== undefined here. But the block above (lines 124-128) still has the same falsy-zero problem:
if (!this.instanceIdValue) {
this.instanceIdValue = 0;
} else {
this.instanceIdValue += 1;
}If this.instanceIdValue is already 0, !this.instanceIdValue is true, so it resets to 0 instead of incrementing. Suggested fix — align with the cleaner logic in the browser package:
if (this.instanceIdValue === undefined || this.instanceIdValue === null) {
this.instanceIdValue = 0;
} else {
this.instanceIdValue += 1;
}
if (instanceID !== undefined) {
this.instanceIdValue = instanceID;
}There was a problem hiding this comment.
Created a issue as this needs a multi file refactoring
🦋 Changeset detectedThe changes in this PR will be included in the next version bump. Not sure what this means? Click here to learn what changesets are. |
This pull request introduces adoption of a Multiton pattern in AsgardeoSPAClient, allowing multiple authentication contexts to coexist within the same application by managing client instances via unique IDs. Several React level APIs have been updated to accept and propagate these instance IDs, ensuring correct isolation and management of authentication state per instance.
Multiton pattern implementation and API updates for instance-awareness::
AsgardeoSPAClientinclient.tsto implement a Multiton pattern, including new static methods for managing instances (getInstance,hasInstance,destroyInstance,getInstanceKeys,destroyAllInstances), and added an instance ID accessor (getInstanceId). [1] [2] [3]AsgardeoReactClientand all organization-related API functions (createOrganization,getAllOrganizations,getMeOrganizations,getOrganization) in React to accept an optionalinstanceIdparameter and use the correct client instance for requests. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]Related Issues
Related PRs
Checklist
Security checks